diff --git a/media/libtheora/lib/huffdec.c b/media/libtheora/lib/huffdec.c
--- a/media/libtheora/lib/huffdec.c
+++ b/media/libtheora/lib/huffdec.c
@@ -320,16 +320,19 @@ static size_t oc_huff_node_size(int _nbi
 /*Produces a collapsed-tree representation of the given token list.
   _tree: The storage for the collapsed Huffman tree.
          This may be NULL to compute the required storage size instead of
           constructing the tree.
   _tokens:  A list of internal tokens, in the order they are found in the
              codebook, and the lengths of their corresponding codewords.
   _ntokens: The number of tokens corresponding to this tree node.
   Return: The number of words required to store the tree.*/
+#if defined(_MSC_VER) && _MSC_VER >= 1700
+#pragma optimize( "", off )
+#endif
 static size_t oc_huff_tree_collapse(ogg_int16_t *_tree,
  unsigned char _tokens[][2],int _ntokens){
   ogg_int16_t   node[34];
   unsigned char depth[34];
   unsigned char last[34];
   size_t        ntree;
   int           ti;
   int           l;
@@ -367,16 +370,19 @@ static size_t oc_huff_tree_collapse(ogg_
       /*Pop back up a level of recursion.*/
       else if(l-->0)nbits=depth[l+1]-depth[l];
     }
     while(l>=0);
   }
   while(l>=0);
   return ntree;
 }
+#if defined(_MSC_VER) && _MSC_VER >= 1700
+#pragma optimize( "", on )
+#endif
 
 /*Unpacks a set of Huffman trees, and reduces them to a collapsed
    representation.
   _opb:   The buffer to unpack the trees from.
   _nodes: The table to fill with the Huffman trees.
   Return: 0 on success, or a negative value on error.
           The caller is responsible for cleaning up any partially initialized
            _nodes on failure.*/
